NDSII – Normalized Difference Soil Index II
NDSII is a soil–vegetation spectral index that compares SWIR and RED reflectance to enhance bare soil and dry surfaces, while suppressing dense green vegetation. It is useful in semi-arid landscapes and agricultural monitoring.
What does NDSII measure?
NDSII exploits the spectral contrast between the short-wave infrared (SWIR) band and the red band. Bare soil and dry surfaces usually show strong SWIR and red reflectance, while healthy vegetation absorbs in red and has a different spectral shape.
- Separating bare soil from vegetation in agricultural fields.
- Identifying dry, exposed soil patches in semi-arid regions.
- Supporting land degradation and soil erosion studies.
- Providing an additional soil-related feature in ML models with NDVI/SAVI.
Note: different papers may use slightly different band combinations under the name "NDSI" or "NDSII". The expression below is an example formulation; adapt it to match your preferred reference.
NDSII formula (example)
NDSII = (SWIR - RED) / (SWIR + RED)
Higher NDSII values tend to correspond to brighter, SWIR–dominated soil surfaces, while lower or negative values are more typical of vegetation or darker targets.
NDSII = (B6 - B4) / (B6 + B4)
B6 = SWIR1, B4 = RED.
NDSII = (B11 - B4) / (B11 + B4)
B11=SWIR, B4=RED (10 m).
You may adjust the SWIR band (e.g. B11 vs B12 for Sentinel-2, or SWIR1 vs SWIR2 for Landsat) depending on which best matches your soil / lithology signature.
Required bands
Sensors & spectral bands
| Sensor | RED | SWIR |
|---|---|---|
| Landsat 8 / 9 OLI | B4 | B6 |
| Sentinel-2 MSI | B4 | B11 |
Tip: always use surface-reflectance products (SR) and apply any scale factors prior to computing NDSII.
Typical behaviour
| Land-cover type | NDSII trend |
|---|---|
| Bright bare soil / dry fields | Higher, positive NDSII |
| Mixed soil–vegetation | Intermediate values |
| Dense green vegetation | Lower or negative NDSII |
| Water / shadow | Very low / noisy NDSII |
Numeric ranges depend on sensor, soil type, moisture, and illumination. Always validate with field data or high-resolution imagery.
Using NDSII in Google Earth Engine
- Select a surface-reflectance collection (Sentinel-2 SR or Landsat 8/9 SR).
- Filter by date, cloud cover, and region of interest (ROI).
- Compute NDSII as (SWIR - RED) / (SWIR + RED).
- Visualize the index and export it if needed.
// NDSII – Normalized Difference Soil Index II example (Sentinel-2) in Google Earth Engine
var roi = /* your geometry here */;
var s2 = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(roi)
.filterDate('2023-01-01', '2023-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.median();
// Select bands (Sentinel-2 SR already scaled to reflectance)
var red = s2.select('B4');
var swir = s2.select('B11');
// Compute NDSII = (SWIR - RED) / (SWIR + RED)
var ndsii = swir.subtract(red)
.divide(swir.add(red))
.rename('NDSII');
// Visualisation
Map.centerObject(roi, 10);
Map.addLayer(ndsii, {
min: -0.5, max: 0.5,
palette: ['#0b1120','#1d4ed8','#22c55e','#eab308','#f97316','#f97373']
}, 'NDSII - Soil Index II');
// Optional export
Export.image.toDrive({
image: ndsii,
description: 'NDSII_Sentinel2_example',
region: roi,
scale: 10,
maxPixels: 1e13
});
Important: if your reference paper defines NDSII with a different band combination (e.g. SWIR2 instead of SWIR1, or with NIR), simply update the expression while keeping this HTML layout as a template.